iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
0

Thread Libraries

  • 工程師利用Thread Libraries提供的API去新增和管理threads。
  • 有兩種主要的執行方式:
  1. 直接存在使用者空間中。
  2. 存在kernel-level的空間中,再由OS支持、調用。

Pthreads

  • 可以提供給user-level與kernel-level。
  • 新增吉同步執行緒的標準是POSIX。
  • Pthreads是定義不是實作。
  • thread library的行為由API決定,而執行方面則取決於thread library的發展。

Java Threads

  • 由JVM所管理。
  • 依照OS給予什麼thread,便實行什麼樣的thread。
  • 有兩種新增方式:
  1. 繼承Thread類別
  2. 用Runnable interface產生的間接thread。

Implicit Threading

  • 由compolers和run-time libraries負責管理與新增執行緒,並非由程式負責。
  • 有三種方法執行:
  1. Thread Pools
  2. OpenMP
  3. Grand Central Dispatch

Thread Pools

  • 是一個存放等待被叫去工作的threads的地方。
  • 其好處有:
  1. 節省去產生一個thread的成本。
  2. 可允許thread的大小跟Pool一樣大。
  3. 可以同步處理要求,不需要中斷。

OpenMP

  • 由compiler處理API,再給C、C++等語言使用。
  • 提供平行處理在共享記憶體的環境中。

Grand Central Dispatch

  • Mac OS X與iOS OS是使用Apple的技術方法。
  • 允許辨識平行部分。
  • 管理大部分的細節。
  • compiler會分割在block內的data到dispatch queue中,這樣便可以同步執行。
  • 有兩種dispatch queue的方法:
  1. serial
  2. concurrent

Threading Issues

  • 系統呼叫的fork()、exec()的語義如何。
  • 信號處理:
  1. 同步或不同步。
  • 目標執行緒的取消:
  1. 不同步或延期

fork()與exec()的語義

  • 在fork一個thread時,看系統是單一新增呼叫的,還是把所有的threads都複製出來。
  • 使用exec的話,便會執行行程中所有的threads.

信號處理

  • 使用在UNIX系統中,是UNIX的重要機制。
  • 用來通知行程某些事件的發生。
  • signal handler用來管理signal:
  1. 當某些特定事件發生時,便會產生signal。
  2. signal會被傳送到行程。
  3. 有兩種處理方式:1-default/2-user-defined
  • 如果使用者沒有定義如何處理,就用default,有就依照使用者定義處理。
  • single-thread:signal直接由行程處理。
  • mutli-thread:有幾種方式可以處理:
  1. 把訊號傳到有應用的執行緒上。
  2. 把訊號直接傳到所有的執行緒上。
  3. 把訊號傳到行程中特定的執行緒中。
  4. 選一個執行緒,負責接收所有的訊號。

Thread Cancellation

  • 在執行緒結束前將其終止。
  • 目標執行緒,就是要被消除的執行緒。
  • 有兩種產生的方法:
  1. 同步消除
  2. 延期消除
  • 實際取消執行緒,還是要取決於執行緒當下的狀態。

Thread-Local Storage

  • Thread-local storage(TLS):允許執行緒擁有自己的數據。
  • 無法控制執行緒的新增過程。
  • local variable:只能在自己的function中被看見。
  • TLS中的資料可以被自己以外的function看見。
  • 對於每個執行緒來說,TLS都是獨一無二的,不會影響到別人的資料。

Schedular Activations

  • 在Many-to-Many跟Two-level通訊要求間,維持適當的kernel threads的數量,再分配給應用程式。
  • LWP:在user thread跟kernel thread中間的資料結構,提供虛擬行程的排程。

Windows Threads

  • 執行Windows API:API主要給Win 98、Win XP、Win 7等使用。
  • 使用One-to-One模組。
  • 每個執行緒包含:
    1.執行緒ID
    2.處理器暫存器的表現狀態
    3.具隱私的數據由run-time libraries與dyanamic link libraries所使用。
  • 在Windows中用到三種資料結構(thread):
  1. ETHREAD:包含thread所屬行程的指標,有個指標指向KTHREAD。
  2. KTHREAD:包含排程跟同步的資料,kernel stack跟指向TEB的指標。
  3. TEB(Thread Envrionent block):包含ID、use stack、thread-local資料庫。

Linux Threads

  • 在Linux中,threads被稱作為tasks。
  • 透過系統呼叫clone()新增thread。
  • clone()允許子task共享父task的address space。

上一篇
DAY7 Threads(上)
下一篇
DAY9 CPU Scheduling(上)
系列文
作業系統概論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言